import axios from "axios";
import {
  ElNotification,
  ElMessageBox,
  ElMessage,
  ElLoading,
} from "element-plus";
import errorCode from "@/utils/errorCode"; // 导入错误码字典
import { getToken } from "@/utils/token";//tokne
import useUserStore from "@/stores/user";
export let isRelogin = { show: false }; // 是否显示重新登录
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8"; // 设置请求头
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 10000,
});
// 添加请求拦截器
service.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false;
    if (getToken() && !isToken) {
      config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    console.log(error);

    return Promise.reject(error);
  }
);

// 添加响应拦截器
service.interceptors.response.use(
  function (res) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const code = res.data.code || 200;
    // 获取错误信息
    const msg = errorCode[code] || res.data.msg || errorCode["default"];

    
    if (code === 401) {
 
  
      if (!isRelogin.show) {
 
        isRelogin.show = true;
        ElMessageBox.confirm(
          "登录状态已过期，您可以继续留在该页面，或者重新登录",
          "系统提示",
          {
            confirmButtonText: "重新登录",
            cancelButtonText: "取消",
            type: "warning",
          }
        )
          .then(() => {
            isRelogin.show = false;
            useUserStore()
              .logOut()
              .then(() => {
                location.href = "/index";
              });
          })
          .catch(() => {
            isRelogin.show = false;
          });
      }
      return Promise.reject("无效的会话，或者会话已过期，请重新登录。");
    } else if (code === 500) {
            ElMessage({ message: msg, type: "error" });
      return Promise.reject(new Error(msg));
    } else if (code === 601) {
         ElMessage({ message: msg, type: "warning" });
         return Promise.reject(new Error(msg));   
    } else if (code !== 200) {
      ElMessage({ message: msg, type: "error" })
        return Promise.reject("error");
    } else {
      return res.data;
}

  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
       let { message } = error;
       if (message == "Network Error") {
         message = "后端接口连接异常";
       } else if (message.includes("timeout")) {
         message = "系统接口请求超时";
       } else if (message.includes("Request failed with status code")) {
         message = "系统接口" + message.substr(message.length - 3) + "异常";
       }
       ElMessage({ message: message, type: "error", duration: 5 * 1000 });
    return Promise.reject(error);
  }
);
export default service;
